package com.aipartner.service;

import com.aipartner.dto.AiImageRequest;
import com.aipartner.dto.AiImageResponse;
import com.aipartner.entity.AiImageExample;
import com.aipartner.entity.AiImageHistory;
import com.aipartner.entity.UserWork;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;
import java.util.Map;

/**
 * AI图片生成服务接口
 * 
 * @author AI Partner Team
 * @since 2024-01-20
 */
public interface AiImageService {
    
    /**
     * 生成图片
     * 
     * @param request 生成请求
     * @return 生成结果
     */
    AiImageResponse generateImage(AiImageRequest request);
    
    /**
     * 查询任务状态
     * 
     * @param taskId 任务ID
     * @return 任务状态
     */
    AiImageResponse queryTaskStatus(String taskId);
    
    /**
     * 获取示例图片列表
     * 
     * @return 示例图片列表
     */
    List<AiImageExample> getExamples();
    
    /**
     * 获取示例图片（包含系统示例和用户作品）
     * 
     * @return 示例图片列表
     */
    List<AiImageExample> getExamplesWithUserWorks();
    
    /**
     * 获取固定系统示例图片（仅系统示例，不包含用户作品）
     * 
     * @return 系统示例图片列表
     */
    List<AiImageExample> getSystemExamples();
    
    /**
     * 获取所有图片（系统示例 + 用户作品） - 统一接口
     * 
     * @return 所有图片列表
     */
    List<AiImageExample> getAllImages();
    
    /**
     * 获取用户历史记录
     * 
     * @param userId 用户ID
     * @param page 页码
     * @param size 页大小
     * @return 历史记录分页
     */
    Page<AiImageHistory> getUserHistory(Long userId, int page, int size);
    
    /**
     * 根据ID获取历史记录
     * 
     * @param id 记录ID
     * @param userId 用户ID
     * @return 历史记录
     */
    AiImageHistory getHistoryById(Long id, Long userId);
    
    /**
     * 删除历史记录
     * 
     * @param id 记录ID
     * @param userId 用户ID
     * @return 是否删除成功
     */
    boolean deleteHistory(Long id, Long userId);
    
    /**
     * 通过taskId删除历史记录
     * 
     * @param taskId 任务ID
     * @param userId 用户ID
     * @return 是否删除成功
     */
    boolean deleteHistoryByTaskId(String taskId, Long userId);

    /**
     * 上传参考图
     * 
     * @param file 图片文件
     * @param userId 用户ID
     * @return 图片URL
     */
    String uploadReferenceImage(MultipartFile file, Long userId);
    
    // ==================== 管理端统计方法 ====================
    
    /**
     * 获取AI生图统计数据
     * 
     * @return 统计数据
     */
    Map<String, Object> getAdminAiImageStats();
    
    /**
     * 获取AI生图历史记录（管理端）
     * 
     * @param page 分页对象
     * @param keyword 搜索关键词
     * @param status 生成状态
     * @return 历史记录分页
     */
    Page<AiImageHistory> getAdminAiImageHistory(Page<AiImageHistory> page, String keyword, String status);
    
    /**
     * 管理端删除AI生图记录
     * 
     * @param recordId 记录ID
     * @return 是否删除成功
     */
    boolean adminDeleteAiImageRecord(Long recordId);
    
    // ==================== 用户作品管理方法 ====================
    
    /**
     * 获取用户作品列表（管理端）
     * 
     * @param page 分页对象
     * @param keyword 搜索关键词
     * @param status 作品状态
     * @param isPublic 是否公开
     * @return 用户作品分页
     */
    Page<UserWork> getAdminUserWorkList(Page<UserWork> page, String keyword, String status, String isPublic);
    
    /**
     * 管理端删除用户作品
     * 
     * @param workId 作品ID
     * @return 是否删除成功
     */
    boolean adminDeleteUserWork(Long workId);
    
    /**
     * 获取用户作品统计数据
     * 
     * @return 统计数据
     */
    Map<String, Object> getAdminUserWorkStats();
    
    /**
     * 管理端更新用户作品状态
     * 
     * @param workId 作品ID
     * @param status 状态
     * @return 是否更新成功
     */
    boolean adminUpdateUserWorkStatus(Long workId, Integer status);
}
